package eraikikon;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.sql.Time;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Vector;

import javax.swing.JOptionPane;
/**
 * 
 * @author si3taldea
 *
 */
public class Kudeatzailea {
	private Integer guneaId;

	private Integer ateaId;

	private Integer txartelIrakId;

	private ItisKud iKud = new ItisKud();
	
	private ErabKud ek= new ErabKud();
	private TxartelKud tk= new TxartelKud();
	private IntzidentziaKud ik=new IntzidentziaKud();

	private TxartelIrakurgailuKud txKud = new TxartelIrakurgailuKud();
	private ZerbitzariaInterfazea k;
	private AteKudeatzailea ateKud = new AteKudeatzailea();
	private IntzidentziaKud intziKud=new IntzidentziaKud();
	private SarbideEskKud sarKud = new SarbideEskKud();
	private Erabiltzaile erab;
	
	 public static final String zerbitzuIzena = "sarreraSisteman";
	public Kudeatzailea() {

	}
/**
 * Txartel identifikatzaile eta kode hori dituen erabiltzailearen sarrera eskaera burutzen du, aurretik ezarritako helburu gunera. 
 * 		Kodea zuzena bada, txartela gaituta badago eta gune horretara sartzeko baimenak baditu,sarbide eskaera egingo du,atearen egoera 
 * aldatu (ireki egingo du) eta erabiltzailearen kokagunea eguneratuko du.
 * 		Kodea zuzena bada, txartela gaituta badago baina gunera sartzeko baimenik ez badu, intzidentzia bat sortu eta sarbide eskaera 
 * burutuko da, baino kasu honetan sarrera baimendu gabe.
 * 		Txartela desgaitua edo kodea gaizki badago, intzidentzia bat sortuko du.
 * @param tx Txartelaren identifikadorea
 * @param kodea Pasahitza
 */
	public void sarbideaEskatu(Integer tx, String kodea) {
		Integer profilId;
		ErabKud erabKud = new ErabKud();
		OrdutegiKud ordKud = new OrdutegiKud();
		Txartela txartela = sarKud.getTxartelDatuak(tx);
		erab = erabKud.getErabDatuak(txartela.getErabiltzaileId());
		Calendar desgaituData = txartela.getDesgaituData();
		Calendar gaituData = txartela.getGaituData();
		Calendar gaur = new GregorianCalendar();
		gaur.setTime(new Date());
		gaur.add(Calendar.MONTH, +1);
		String data= gaur.get(Calendar.YEAR)+"-"+gaur.get(Calendar.MONTH)+"-"+gaur.get(Calendar.DATE)+" "+gaur.get(Calendar.HOUR)+":"+gaur.get(Calendar.MINUTE)+":"+gaur.get(Calendar.SECOND);
		Time ordua = new Time(gaur.get(Calendar.HOUR_OF_DAY), gaur.get(Calendar.MINUTE), gaur.get(Calendar.SECOND));
		//pasahitza ondo
		if (erab.getPasahitza().compareTo(kodea) == 0)
			//txartela gaituta
			{
			if ((desgaituData.after(gaur)) && (gaituData.before(gaur))) {
				Ordutegia ord = ordKud.getProfilOrdutegia(guneaId, erab
						.getProfilId());
				//passahitza ondo baimenik ez				
				if((ord.getbukaeraOrdua()==null)||(ord.getHasieraOrdua()==null)){
					System.out.println("ordutegitik kanpo");
					intziKud.intzidentziasortu(data, "larritasunike ez", "ez onartua","baimenik ez", erab.getTxartelId(), ateaId, txartelIrakId, 'e');
					//sarbideEskaera sortu
					sarKud.sarbideEskaera(data, 'e', "ez du gune honetan sartzeko baimenik", erab
							.getTxartelId(), txartelIrakId);
					JOptionPane.showMessageDialog(null, "EZ DUZU GUNE HONETAN SARTZEKO BAIMENIK");
					//rmi hasi
//					 if (System.getSecurityManager() ==null){
//						   System.setProperty("java.security.policy","client.policy");
//							 System.setSecurityManager(new RMISecurityManager());
//						}
////				   
//				   String zerbIzena = "rmi://localhost:1099/"+zerbitzuIzena;
//				   // 	"rmi://IP_Helbidea:PortuZenb/ZerbitzuarenIzena"
//				    try {
//						k = (ZerbitzariaInterfazea)Naming.lookup(zerbIzena);
//						k.intzidentziarenBerriEman();
//					} catch (MalformedURLException e) {
//						// TODO Auto-generated catch block
//						e.printStackTrace();
//					} catch (RemoteException e) {
//						// TODO Auto-generated catch block
//						e.printStackTrace();
//					} catch (NotBoundException e) {
//						// TODO Auto-generated catch block
//						e.printStackTrace();
//					}
//					
				}
				else if((ord.getbukaeraOrdua().before(ordua))||(ord.getHasieraOrdua().after(ordua))){
					System.out.println("ordutegitik kanpo");
					intziKud.intzidentziasortu(data, "larritasunike ez", "ez onartua","baimenik ez", erab.getTxartelId(), ateaId, txartelIrakId, 'e');
					//sarbideEskaera sortu
					sarKud.sarbideEskaera(data, 'e', "ez du gune honetan sartzeko baimenik", erab
							.getTxartelId(), txartelIrakId);
					JOptionPane.showMessageDialog(null, "EZ DUZU GUNE HONETAN SARTZEKO BAIMENIK");
				//trycatch
	
						  
//					   
			
				}
				//`pasahitza ondo baimenak bai
				else if ((ord.getbukaeraOrdua().after(ordua))
						&& (ord.getHasieraOrdua().before(ordua))) {
					ateKud.atearenEgoeraAldatu(ateaId);
					
					sarKud.sarbideEskaera(data, 'b', "sdfsdaf", erab
							.getTxartelId(), txartelIrakId);
				iKud.kokapenaEguneratu(erab.getId(),guneaId);
				intziKud.intzidentziasortu(data, "larritasunike ez", "onartua","sarbide eskaera onartua", erab.getTxartelId(), ateaId, txartelIrakId, 'b');
				JOptionPane.showMessageDialog(null, "DENA ONDO JOAN DA");
				}
			}
			else {//txartela desgaitua
				intziKud.intzidentziasortu(data, "larria", "sarrera", "txartela desgaitua", erab.getTxartelId(), ateaId, txartelIrakId, 'e');
				JOptionPane.showMessageDialog(null, "SARTU PASAHITZA BERRIRO");
			}
			}
		else{
			intziKud.intzidentziasortu(data, "gutxi", "aaa", "pasahitza gaizki", erab.getId(), ateaId, txartelIrakId, 'e');
			JOptionPane.showMessageDialog(null, "SARTU PASAHITZA BERRIRO");
		}
		//kodea eta txartela gaizki
		if ((erab.getPasahitza().compareTo(kodea) != 0)&&(desgaituData.before(gaur)) && (gaituData.after(gaur)))
		JOptionPane.showMessageDialog(null, "SARTU PASAHITZA BERRIRO");
		intziKud.intzidentziasortu(data, "larritasunike ez", "ez onartua","bai txartela eta bai kodea gaizki", erab.getTxartelId(), ateaId, txartelIrakId, 'e');
		//intzidentzia sortu
		}
		/**
		 * Txartel identifikatzaile hori duen erabiltzailearen kokagunea bueltatzen du
		 * @param txId Txartel identifikatzailea
		 * @return Itis 
		 */		
	public Itis getUnekoKokagunea(Integer txId) {

		return iKud.getUnekoKokagunea(txId);
	}
/**
 * Gunea emanda, helburu gune posibleetara joateko erabili behar dituen txartel irakurgailuak dituen bektorea bueltatzen du.
 * @param gunea
 * @return txartelIrakurgailu bektorea
 */
	public Vector<TxartelIrakurgailua> noraJoan(Integer gunea) {

		return txKud.getIrakurgailuLista(gunea);
	}
	/**
	 * Metodo honekin beste nonbaiten lortutako gune identifikatzailea lortzen da
	 * @param gunea Gune identifikatzailea
	 */

	public void bidaliHelburuGunea(Integer gunea) {
		guneaId = gunea;
	}
	/**
	 * Metodo honekin beste nonbaiten lortutako ate identifikatzailea lortzen da
	 * @param ateId ate identifikatzailea
	 */

	public void bidaliAtea(Integer ateId) {
		ateaId = ateId;
	}
/**
 * Metodo honekin beste nonbaiten lortutako txartel Irakurgailu identifikatzailea lortzen da
 * @param txIrId txartel irakurgailu identifikatzailea
 */
	public void bidaliTxartelIrakurgailuId(Integer txIrId) {
		txartelIrakId = txIrId;
	}
	/**
	 * Klase honetako erabiltzailea bat beste batean erabili ahal izateko
	 * @return erab Erabiltzailea
	 */
	public Erabiltzaile bidaliErabiltzailea(){
		return erab;
	}
	/**
	 * Irakasleak diren erabiltzaileen identifikadoreak lortzen ditu.
	 * @return Erabiltzaileen identifikatzailez osatutako bektorea.
	 */
	public Vector<Integer> getIrakasleak(){
		return ek.getErabiltzaileak();	
	}
	/**
	 * Pasatako erabiltzailearen txartelaren identifikatzailea itzuliko du, baldin eta txartelak bi urte baditu gutxienez edo gehienez.
	 * @param erab_id erabiltzailearen identifikadorea
	 * @return Txartel identifikatzailea edo null
	 */
	public Integer getTxartel2Urte (Integer erab_id){
		return tk.getTxartel2Urte(erab_id);
		
	}
	/**
	 * Sartutako hilabete kopuruaren epean txartel hori duen erabiltzailearen sarbide eskaerak lortzen ditu
	 * @param txartel_id txartel identifikatzailea
	 * @param hilabeteKop hilabete kopurua
	 * @return sarbide eskaera ukatuen bektorea
	 */
	public Vector<SarbideEskaera> getSarbideEskaeraUkatuak(Integer txartel_id,Integer hilabeteKop){
		return sarKud.getSarbideEskaeraUkatuak(txartel_id, hilabeteKop);
		
	}
	/**
	 * Erabiltzailearen datuak lortzen ditu
	 * @param erab_id erabiltzaile identifikatzailea
	 * @return Erabiltzailea
	 */
	public Erabiltzaile getErabDatuak(Integer erab_id){
		return ek.getErabDatuak(erab_id);
		
	}
	/**
	 * Irakasle ukatu baten datuekin intzidentzia bat sortzen du
	 * @param iuz Irakasle ukatua
	 */
	public void intzidentziaSortu(IrakasleUkatua iuz){
		ik.intzidentziaTxertatu(iuz);
	}

}
